// handleActions 定义处理方法
import { handleActions } from "redux-actions";
import { GET_SHOPPING_CART, CART_SET_CUR_PAGE, CART_SET_EACH_PAGE, CART_GET_SEARCH } from "../types";

import _ from "lodash";




// 初始值
const initData = {
  curPage: 1,
  eachPage: 5,
  total: 0,
  maxPage: 0,
  rows: []
}

// 用来创建redecer
//参数1、 接受一个对象作为参数，对象内部就是关于状态的具体处理行为
// 参数2、为初始值
// 返回值是一个处理器函数，
export const shoppingCart = handleActions({
  // 获取当页数据
  [GET_SHOPPING_CART]: (state, { payload }) => {
    const { total, rows, maxPage } = payload;
    return _.assign({}, state, {
      total,
      rows,
      maxPage
    })
  },
  // 修改当前页
  [CART_SET_CUR_PAGE]: (state, { payload }) => {
    const { curPage } = payload;
    const $state = _.clone(state);
    $state.curPage = curPage;
    return $state;
  },
  // 修改每页显示条数
  [CART_SET_EACH_PAGE]: (state, { payload }) => {
    const { eachPage } = payload;
    const $state = _.clone(state);
    // 因如果从每页10变为5条时，第一次渲染页面后，此时rows长度依然为10，但每页显示条数为5，所以浏览器会给出警告数据长度大于每页显示条数，此时如果rows数据赋值为空，则可以规避警告
    $state.rows = [];
    $state.eachPage = eachPage;
    return $state;
  },

  // 搜索数据合并
  [CART_GET_SEARCH]: (state, { payload }) => {
    const { searchRows } = payload;
    return _.assign({}, state, {
      total: searchRows.length,
      rows: searchRows,
    });
  }


}, initData)